/*!
 * egpusers-allasync-control-inc.js
 * 
 *  tetsuya_odaka (EzoGP)
 * 
 * (C) 2009, EzoGP.
 * $Id: syracava-1.0-min.js 455 2009-04-08 08:54:14Z tetsuya_odaka $
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * EGPUSERSメンテナンス
 *  egpsersAllAsyncList.tplに読み込んで使用する（initializeはそこで起動）。
 * 
 *  （クロージャーパターンで実装）
 * 
 * @author
 *     Tetsuya Odaka  ( EzoGP )<br>
 * 
 */

////////////////////////////////////////////////////////////////////////////
var EzTable = function() {

	var myDataSource;
	var myDataTable;
	var myAutoComplete;

	var Dom = YAHOO.util.Dom;
	var Event = YAHOO.util.Event;
	var Connect = YAHOO.util.Connect;
	
	/*****************************************************
	* 新規登録画面の生成
	*****************************************************/
    this.createEntrySubWindow = function(_evt) {

    	// MyAsyncPanelSubWindowオブジェクトのコンフィグとインスタンス化
    	var config ={
    		'renderDiv'	:	'egp-my-window',
    		'dataArray'	:	null,
    		'formURL'	:	'./forms/egpUsersModalEntry.txt',
    		'validateURL':	'../Myznala/myAsyncValidate.php',
   			'modal'		:	true
    	}
    	var subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
    	subWindow.createScreen = function(obj){

   			/*---------------------------------------*/
    		// Exit Processの定義
    		var exitProc = '';
// 画面をリフレッシュする場合
//    						'Dom.setStyle("egp-my-window","visibility","hidden");' +
//   						'Dom.get("egp-my-ac-text").value=Dom.get("email").value;' +
//    						'tObj.createTable(Dom.get("email").value);'

    		// 登録（submit）ボタンにハンドラーを設定する。
			var submitObj = new MySubmit();
			var config = {
				'submitType': 'Async',
				'submitURL'	: 'egpUsersEntryAsync.php',
				'submitForm': 'form1',
				'exitProc'	: exitProc,
				'upload'	: false
			}

			YAHOO.util.Event.on('egp-my-entry-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}

		// サブウィンドウの表示
		subWindow.openHdlr();
	}

	/*****************************************************
	* アップロード画面の生成
	*****************************************************/
    this.createUploadSubWindow = function(_evt) {
    	
    	// MyAsyncModalSubWindowオブジェクトのコンフィグとインスタンス化
    	var config ={
    		'renderDiv'	:	'egp-my-window',
    		'dataArray'	:	null,
    		'formURL'	:	'./forms/egpusersUpload.txt',
    		'validateURL':	'../Myznala/myAsyncValidate.php',
   			'modal'		:	true
    	}
    	var subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
    	subWindow.createScreen = function(obj){
   			/*---------------------------------------*/
    		// Exit Processの定義
    		var exitProc = '';

    		// 登録（submit）ボタンにハンドラーを設定する。
			var submitObj = new MySubmit();
			var config = {
				'submitType': 'Async',
				'submitURL'	: 'egpusersUploadAsync.php',
				'submitForm': 'form1',
				'exitProc'	: exitProc,
				'upload'	: true
			}

			YAHOO.util.Event.on('egp-my-entry-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}

	/*****************************************************
	* 詳細画面の生成
	*****************************************************/
    var createDetailSubWindow = function(rowData) {
    	var subWindow,config;
    	
   		// MyAsyncSubWindowオブジェクトのコンフィグとインスタンス化
	   	config ={
   			'renderDiv'	:	'egp-my-window',
   			'dataArray'	:	rowData,
   			'formURL'	:	'./forms/egpusersDetail.txt',
   			'validateURL':	'not needed',
   			'modal'		:	false,
			'upload'	: false
   		};
   		subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
   		subWindow.createScreen = function(obj){
   			var dArr = obj.dArr;
   			/*---------------------------------------*/
			Dom.get('email').innerHTML = dArr['email'];
			Dom.get('name').innerHTML = dArr['name'];
			Dom.get('nameyomi').innerHTML = dArr['nameyomi'];
			Dom.get('password').innerHTML = dArr['password'];
			Dom.get('role').innerHTML = dArr['role'];
   			/*---------------------------------------*/
			return;	
		}
    	// サブウィンドウの表示
		subWindow.openHdlr();
    }
    
	/*****************************************************
	* 削除画面の生成
	*****************************************************/
    var createDeleteSubWindow = function(rowData) {
    	var subWindow,config;
    	
		// MyAsyncSubWindowオブジェクトのコンフィグとインスタンス化
	   	config ={
   			'renderDiv'	:	'egp-my-window',
   			'dataArray'	:	rowData,
   			'formURL'	:	'./forms/egpusersDelete.txt',
   			'validateURL':	'not needed',
   			'modal'		:	false,
			'upload'	: 	false
   		}
   		subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
   		subWindow.createScreen = function(obj){
   			var dArr = obj.dArr;
   			/*---------------------------------------*/
			Dom.get('id').value 			= dArr['id']
			Dom.get('email').innerHTML 		= dArr['email']
			Dom.get('name').innerHTML 		= dArr['name']
			Dom.get('nameyomi').innerHTML 	= dArr['nameyomi']
			Dom.get('password').innerHTML 	= dArr['password']
			Dom.get('role').innerHTML 		= dArr['role']

			// 削除（submit）ボタンにハンドラーを仕込む
			var submitObj = new MySubmit();
	    	// Exit Processの定義
   			var exitProc = '';
			var config = {
				submitType	: 'Async',
				submitURL	: 'egpusersDeleteAsync.php',
				submitForm	: 'form1',
				exitProc	: exitProc
			}
			YAHOO.util.Event.on('egp-my-delete-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}

	/*****************************************************
	* 更新画面の生成
	*****************************************************/
    var createUpdateSubWindow = function(rowData) {
    	var subWindow,config;
    	
		// MyAsyncSubWindowオブジェクトのコンフィグとインスタンス化
	   	config ={
   			'renderDiv'	:	'egp-my-window',
   			'dataArray'	:	rowData,
   			'formURL'	:	'./forms/egpusersUpdate.txt',
   			'validateURL':	'../Myznala/myAsyncValidate.php',
   			'modal'		:	false,
			'upload'	: 	false
   		}
   		subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
   		subWindow.createScreen = function(obj){

   			var dArr = obj.dArr;
   			/*---------------------------------------*/
			Dom.get('id').value 		= dArr['id'];
			Dom.get('email').value 		= dArr['email'];
			Dom.get('name').value 		= dArr['name'];
			Dom.get('nameyomi').value 	= dArr['nameyomi'];
			Dom.get('password').value 	= dArr['password'];

			// チェックボックスの編集
	    	var num = 0;
			if(dArr['role'] == 'guest'){
		    	var num = 0;
    		}else if(dArr['role'] == 'manager'){
    			var num = 1;
    		}else if(dArr['role'] == 'admin'){
    			var num = 2;
    		}
    		// IEだと書式が違う。
			Dom.get('form1').role[num].checked = true;

   			// 更新（submit）ボタンにハンドラーを設定する。
			var submitObj = new MySubmit();
	    	// Exit Processの定義(evalで評価されて実行される)
   			var exitProc = '';
			var config = {
				submitType	: 'Async',
				submitURL	: 'egpusersUpdateAsync.php',
				submitForm	: 'form1',
				exitProc	: exitProc
			}
			YAHOO.util.Event.on('egp-my-update-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}
	
	/*****************************************************
	* 生成する画面の振り分け
	******************************************************/
	var myRowSelectDispatch = function(oArgs){
	
		Event.preventDefault(oArgs.event);
		var target = Event.getTarget(oArgs.event);
		var targetClassName = getClassName(target);
		var rowData = this._oAnchorRecord._oData;

		/**
		 * 明細（Detail）
		 */
		var idx = targetClassName.indexOf('egp-my-dt-detail',0);
		if(idx != -1){
				createDetailSubWindow(rowData);
		}
		
		/**　
		 * 更新（Update） 
		 */
		idx = targetClassName.indexOf('egp-my-dt-update',0);
		if(idx != -1){
				createUpdateSubWindow(rowData);
		}
			
		/**
		 * 削除（Delete）
		 */
		idx = targetClassName.indexOf('egp-my-dt-delete',0);
		if(idx != -1){
				createDeleteSubWindow(rowData);
		}
	};

	/*****************************************************
	* クラス名の取得
	*****************************************************/
	var getClassName = function(_obj){
		if(document.all){
			//for IE
			var _keys = _obj.getAttribute('className');
		}else{
			// for FF, Chrome, Safari
			var _keys = _obj.getAttribute('class');
		}
		return _keys;
	};
	
	/*****************************************************
	* 画面全体のリフレッシュ
	*****************************************************/
    this.refreshScreen = function() {
    	Dom.get('egp-my-ac-text').value='';
		document.location.reload();
	}    

	/*****************************************************
	* 初期処理
	*****************************************************/
   	this.init = function() {
		/*
		* AutoCompleteインスタンスの生成
		*/
	    myEmailDataSource = 
	    	new YAHOO.util.XHRDataSource('http://localhost/eclipse/Myznala_Base/examples-egpusers/egpusersGetAllByEmail.php');
    	myEmailDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
        myEmailDataSource.responseSchema = {
    		recordDelim: '\n', // 行区切り
       		fieldDelim: ',', // フィールド区切り
        	fields: ['email']
        };
		
		myAutoComplete = new YAHOO.widget.AutoComplete("egp-my-ac-text",
									"egp-my-ac-container", myEmailDataSource);
								
		/*
		* DataTableインスタンスの生成
		*/
		this.createTable('');
    }

	/*****************************************************
	* 入力値でTableを再構築する。
	*****************************************************/
    this.reviceTable = function() {
    	this.createTable(Dom.get('egp-my-ac-text').value);
	}    

	/*****************************************************
	* Tableを構築する。
	*****************************************************/
    this.createTable = function(_email) {
    
   		// DataTable用：カスタムフォーマッター
		var mySearchFormatter = function(elCell, oRecord, oColumn, oData) {
            elCell.innerHTML = '<a title="照会">' + 
            					'<img class="egp-my-dt-detail" src="../images/search.png"></a>';
		};

		var myUpdateFormatter = function(elCell, oRecord, oColumn, oData) {
            elCell.innerHTML = '<a title="変更">' + 
            					'<img class="egp-my-dt-update" src="../images/reply.png"></a>';
		};

		var myDeleteFormatter = function(elCell, oRecord, oColumn, oData) {
            elCell.innerHTML = '<a title="削除">' + 
            					'<img class="egp-my-dt-delete" src="../images/action_delete.png"></a>';
		};

   		// DataTable用：列定義
       	var myColumnDefs = [
       		{	key:"detail",
       			label:"",
       			formatter:mySearchFormatter},
       		{	key:"update",
       			label:"",
       			formatter:myUpdateFormatter},
       		{	key:"delete",
       			label:"",
       			formatter:myDeleteFormatter},
           	{	key:"id",
           		parser:"number",
               	label:"ID",
               	width:50,
               	resizeable:true},
            {	key:"email",
                label:"E-Mail",
                parser:"string",
                width:200,
                resizeable:true},
            {	key:"name",
                label:"名前",
                width:300,
                parser:"string",
                resizeable:true},
            {	key:"role",
                label:"ロール",
                width:100,
                parser:"string",
                resizeable:true}
        ];

	   	// DataTable用：コンフィグ属性
		var myConfigs = {
            	paginator: 
               		new YAHOO.widget.Paginator({
               			rowsPerPage: 5,
               			pageLinks: 5
           			}),
           		selectionMode:"single"
        };

		// データはサーバーからXHRで持ってくる。（HttpServer経由;遅い）
		if(_email=='' || _email==null){
			_url='http://localhost/eclipse/Myznala_Base/examples-egpusers/egpusersGetAllData.php';
		}else{
			_url='http://localhost/eclipse/Myznala_Base/examples-egpusers/egpusersGetAllData.php?query='+_email;
		}
        // DataSourceのインスタンス化
	    myDataSource = new YAHOO.util.XHRDataSource(_url);
    	myDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
        myDataSource.responseSchema = {
    	    recordDelim: '\n', // 行区切り
        	fieldDelim: ',', // フィールド区切り
        	fields: ['id','email','password','name','nameyomi','role']
        };

	    // DataTableのインスタンス化
    	myDataTable = new YAHOO.widget.DataTable("table1", 
					    	myColumnDefs, myDataSource, myConfigs);

		/*
		* ハンドラーの設定
		*/
		// クリックでハイライトするようにハンドラを設定
	    myDataTable.subscribe("rowClickEvent",
               			myDataTable.onEventSelectRow);
        myDataTable.subscribe("rowMouseoverEvent", 
           				myDataTable.onEventHighlightRow);
        myDataTable.subscribe("rowMouseoutEvent", 
           				myDataTable.onEventUnhighlightRow);

		//行のクリックイベント
	    myDataTable.subscribe("rowClickEvent",
               			myRowSelectDispatch);
    
    }

    this.oDS = myDataSource;
    this.oDT = myDataTable;
	this.oAC = myAutoComplete;

	return this;
}
